package com.liuyu.consumer.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 该类声明超时队列
 *  publisher--msg-->ttlExchange--msg--》ttlQueue《--10sec--consumer
 *                                          |
 *                                       dlExchange----》dlQueue----》orderHandle
 *
 * 这种方式类似与本地重试依然消费失败采取republishMessage处理策略到指定的交换机和消息队列中
 */
@Configuration
@Slf4j
public class TTLMessageConfig {
    @Bean
    public Queue ttlQueue() {
        return QueueBuilder
                .durable("ttl.queue")    //指定队列的名称并做持久化
                .ttl(10000) //设置队列超时时间 10秒
                .deadLetterExchange("dl.direct")    //绑定死信交换机
                .deadLetterRoutingKey("dl") //绑定死信路由key
                .build();
    }

    /**
     * 死信交换机
     */
    @Bean
    public DirectExchange ttlExchange() {
        return new DirectExchange("ttl.direct");
    }

    @Bean
    public Binding ttlBinding(Queue ttlQueue, DirectExchange ttlExchange) {
        return BindingBuilder.bind(ttlQueue).to(ttlExchange).with("ttl");
    }


}
